#include "Bloque.h"
//#include "Utilitaria.h"

// Bloque (Implementa manejo y control de bloques en memoria)

		/*
		 * Crea un Bloque vacio.
		 * Sirve para levantar bloques de disco sin pisar su información.
		 **/


		Bloque::Bloque(){
		}

		Bloque::Bloque(int tamanio){
			this->espacioLibre =tamanio;
			this ->nroBloque = -1;
			this->tamanio = tamanio;
			this->registros = new list<Registro>;
		}

		Bloque::Bloque(int nroBloque, int tamanio) {
			this->espacioLibre = tamanio;
			this->nroBloque = nroBloque;
			this->tamanio = tamanio;
			this->registros = new list<Registro>;
		}

		Bloque::~Bloque(){

			/*if (this->registros!=NULL)
			{
				cout << "SE BORRA UN BLOQUE " << endl;
				delete (this->registros);
			}*/

		}
		
		list<Registro>* Bloque::getRegistros(){
				return registros;
		    }

		int Bloque::getTamanio() {
			return tamanio;
		}


		    int Bloque::getEspaciolibre()
		    {
		    	return espacioLibre;
		    }

		     int Bloque::getNroBloque() {
		    	 return nroBloque;
		     }

		     void Bloque::setNroBloque(int nroBloque) {
		    	 this->nroBloque=nroBloque;
		     }

		     string Bloque::Serializar() {
		    	 string bloque;
		    	 list<Registro>::iterator it;
		    	 it= registros->begin();

		    	 if (it!=registros->end()) {
		    		 bloque= it->Serializar();
		    		 it++;
		    	 }

		    	 while (it!=registros->end()) {
		    		 bloque=bloque + "|" + it->Serializar();
		    		 it++;
		    	 }

		    	 int j;
		    	 this->espacioLibre=this->tamanio-bloque.size();

		    	 for(j=0; j<this->espacioLibre;j++) {
		    		 bloque= bloque + " ";
		    	 }

		    	 return bloque;
		     }
		
		    void Bloque::desSerializar (string bloque) {
		    	int i;
		    	//j=0;
		    	i=0;
		    	string registro;
		    	registro= "";
		    	int tamanioOcupado= this->tamanio-this->espacioLibre;
		    	//int tamanioOcupado= bloque.size();
		    	while(i<tamanioOcupado){

		    		while((bloque[i]!='|') && (i<tamanioOcupado)) {
		    			registro=registro + bloque[i];
		    			i++;
		    		}
					Registro reg;
					reg.desSerializar(registro);
					this->registros->push_back(reg);

					registro= "";

					i++;


		    	}


		    }

		    void Bloque::setEspacioLibre(int espaciolibre)
		    {
		    	this->espacioLibre=espaciolibre;

		    }

